package edu.unu.iist.ts2es.util;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class TwoKeyMap<K1,K2,V>{
	
	private Map<K1,Map<K2,V>> map;
	
	public TwoKeyMap(){
		map = new HashMap<K1,Map<K2,V>>();
	}
	
	public void clear() {
		map.clear();
	}

	public boolean containsKey(K1 key1,K2 key2) { 
		if(map.containsKey(key1)){
			return map.get(key1).containsKey(key2);
		}
		return false;
	}
	
	public boolean containsKey(K1 key){
		return map.containsKey(key);
	}

	
	public V get(K1 key1,K2 key2) {
		if(map.containsKey(key1)){
			return map.get(key1).get(key2);
		}
		return null;
	}
	
	public Map<K2,V> get(K1 key1){
		return map.get(key1);
	}

	
	public boolean isEmpty() {
		return map.isEmpty();
	}

	public Set<K1> keySet() {
		return map.keySet();
	}

	public V put(K1 key1, K2 key2, V value) {
		if(map.containsKey(key1)){
			return map.get(key1).put(key2, value);
		}else{
			Map map2 = new HashMap<K2,V>();
			map2.put(key2, value);
			map.put(key1,map2);
			return value;
		}
	}
	
	@Override
	public String toString(){
		String result = "";
		Iterator<K1> it = map.keySet().iterator();
		while(it.hasNext()){
			K1 item = it.next();
			result = result + "\n" + item.toString() + "\t" + map.get(item);
		}
		return result;
	}

	/*@Override
	public void putAll(Map<? extends K1, ? extends Map<K2, V>> m) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Map<K2, V> remove(Object key) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int size() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Collection<Map<K2, V>> values() {
		// TODO Auto-generated method stub
		return null;
	}*/
}
